package com.laamella.syntherface.synths.alesis.micron.model;

import com.laamella.syntherface.synths.midi.MidiInterface;
import com.laamella.syntherface.synths.models.NrpnParameterModel;
import com.laamella.syntherface.synths.models.ParameterModel;
import com.laamella.syntherface.synths.models.ParameterType;

public class Effects {
	private static final ParameterType Fx1ParameterType = new ParameterType.IntegerRange(-128, 127);
	private static final ParameterType Fx2ParameterType = new ParameterType.IntegerRange(-32768, 32767);
	private static final ParameterType SyncType = new ParameterType.List(
			"x 16, x 12, x 10 2/3, x 8, x 6, x 5 1/3, x 4, x 3, x 2 2/3, x 2, x 1 1/2, x 1 1/3, x 1, x 3/4, x 2/3, x 1/2, x 3/8, x 1/3, x 1/4, x 3/16, x 1/6, x 1/8, x 3/32, x 1/12, x 1/16");

	public final ParameterModel fxWetDryMix;
	public final ParameterModel fx1fx2balance;
	public final ParameterModel fxType;
	public final ParameterModel fxParamA;
	public final ParameterModel fxParamB;
	public final ParameterModel fxParamC;
	public final ParameterModel fxParamD;
	public final ParameterModel fxParamE;
	public final ParameterModel fxParamF;
	public final ParameterModel fxParamG;
	public final ParameterModel fxParamCSynced;
	public final ParameterModel fx2Type;
	public final ParameterModel fx2ParamA;
	public final ParameterModel fx2ParamB;
	public final ParameterModel fx2ParamC;
	public final ParameterModel fx2ParamD;
	public final ParameterModel fx2ParamASynced;

	// TODO wet/dry mix???

	public Effects(MidiInterface midiInterface) {
		fxWetDryMix = new NrpnParameterModel("fx wet/dry mix", midiInterface, 321, ParameterType.PercentageAlsoNegative);
		fx1fx2balance = new NrpnParameterModel("fx1 fx2 balance", midiInterface, 322, new ParameterType.IntegerRange(-50,50));
		fxType = new NrpnParameterModel("fx type", midiInterface, 323, new ParameterType.List(
				"bypass, super phaser, string phaser, theta flanger, thru 0 flanger, chorus, vocoder"));
		fxParamA = new NrpnParameterModel("fx param a", midiInterface, 324, Fx1ParameterType);
		fxParamB = new NrpnParameterModel("fx param a", midiInterface, 325, Fx1ParameterType);
		fxParamC = new NrpnParameterModel("fx param a", midiInterface, 326, Fx1ParameterType);
		fxParamD = new NrpnParameterModel("fx param a", midiInterface, 327, Fx1ParameterType);
		fxParamE = new NrpnParameterModel("fx param a", midiInterface, 328, Fx1ParameterType);
		fxParamF = new NrpnParameterModel("fx param a", midiInterface, 329, Fx1ParameterType);
		fxParamG = new NrpnParameterModel("fx param a", midiInterface, 330, Fx1ParameterType);
		fxParamCSynced = new NrpnParameterModel("fx param c synced", midiInterface, 331, SyncType);
		fx2Type = new NrpnParameterModel("fx2 type", midiInterface, 332, new ParameterType.List(
				"bypass, mono delay, stereo delay, split L/R delay, hall reverb, plate reverb, room reverb"));
		fx2ParamA = new NrpnParameterModel("fx2 param a", midiInterface, 333, Fx2ParameterType);
		fx2ParamB = new NrpnParameterModel("fx2 param b", midiInterface, 334, Fx2ParameterType);
		fx2ParamC = new NrpnParameterModel("fx2 param c", midiInterface, 335, Fx2ParameterType);
		fx2ParamD = new NrpnParameterModel("fx2 param d", midiInterface, 336, Fx2ParameterType);
		fx2ParamASynced = new NrpnParameterModel("fx param a synced", midiInterface, 337, SyncType);
	}
}
